package java8.chapter03.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class Lambdas {

	interface ApplePredicate {
		public boolean test(Apple a);
	}

	public static class Apple {
		
		private int weight = 0;
		private String color = "";
		
		public Apple(int weight, String color) {
			this.weight = weight;
			this.color = color;
		}

		public Integer getWeight() {
			return weight;
		}

		public void setWeight(int weight) {
			this.weight = weight;
		}

		public String getColor() {
			return color;
		}

		public void setColor(String color) {
			this.color = color;
		}

		@Override
		public String toString() {
			return "Apple(" + "color='" + color + '\'' + ", weight=" + weight + '}';
		}
		
	}

	public static void main(String[] args) {
		Runnable r = () -> System.out.println("Hello!");
		r.run();
		
		List<Apple> inventory = Arrays.asList(new Apple(80, "green"), new Apple(155, "green"), new Apple(120, "red"));
		
		List<Apple> greenApples = filter(inventory, (Apple a) -> "green".equals(a.getColor()));
		System.out.println(greenApples);
		
		Comparator<Apple> c = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());
		
		inventory.sort(c);
		System.out.println(inventory);
	}

	private static List<Apple> filter(List<Apple> inventory, ApplePredicate p) {
		List<Apple> result = new ArrayList<>();
		for (Apple apple : inventory) {
			if (p.test(apple))
				result.add(apple);
		}
		return result;
	}

}
